{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Graph Learning Implementation\n",
    "\n",
    "This notebook implements the graph concepts discussed in the chapter, including graph representations and search algorithms."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import required libraries\n",
    "from typing import Dict, List, Set, Optional\n",
    "from collections import defaultdict, deque"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Graph Representation Class\n",
    "Implementation of a graph class supporting both adjacency list and matrix representations"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Graph:\n",
    "    def __init__(self, directed: bool = False):\n",
    "        self.directed = directed\n",
    "        self.adj_list: Dict[str, List[str]] = defaultdict(list)\n",
    "        self.adj_matrix: Dict[tuple, int] = {}\n",
    "        self.vertices: Set[str] = set()\n",
    "    \n",
    "    def add_edge(self, v1: str, v2: str) -> None:\n",
    "        \"\"\"Add edge between vertices v1 and v2\"\"\"\n",
    "        self.vertices.add(v1)\n",
    "        self.vertices.add(v2)\n",
    "        self.adj_list[v1].append(v2)\n",
    "        self.adj_matrix[(v1, v2)] = 1\n",
    "        \n",
    "        if not self.directed:\n",
    "            self.adj_list[v2].append(v1)\n",
    "            self.adj_matrix[(v2, v1)] = 1\n",
    "    \n",
    "    def get_neighbors(self, vertex: str) -> List[str]:\n",
    "        \"\"\"Get all neighbors of a vertex\"\"\"\n",
    "        return self.adj_list[vertex]\n",
    "    \n",
    "    def edge_exists(self, v1: str, v2: str) -> bool:\n",
    "        \"\"\"Check if edge exists between v1 and v2\"\"\"\n",
    "        return (v1, v2) in self.adj_matrix"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. Search Algorithms Implementation\n",
    "Implementation of BFS and DFS algorithms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "def bfs(graph: Graph, start: str, target: Optional[str] = None) -> Dict[str, int]:\n",
    "    \"\"\"Perform BFS traversal and return distances from start node\"\"\"\n",
    "    visited = set()\n",
    "    distances = {start: 0}\n",
    "    queue = deque([start])\n",
    "    \n",
    "    while queue:\n",
    "        vertex = queue.popleft()\n",
    "        if vertex == target:\n",
    "            return distances\n",
    "            \n",
    "        for neighbor in graph.get_neighbors(vertex):\n",
    "            if neighbor not in distances:  # Check if not already discovered\n",
    "                queue.append(neighbor)\n",
    "                distances[neighbor] = distances[vertex] + 1\n",
    "        \n",
    "        visited.add(vertex)\n",
    "    \n",
    "    return distances\n",
    "\n",
    "def dfs(graph: Graph, start: str, visited: Optional[Set[str]] = None) -> Set[str]:\n",
    "    \"\"\"Perform DFS traversal and return set of visited nodes\"\"\"\n",
    "    if visited is None:\n",
    "        visited = set()\n",
    "    \n",
    "    visited.add(start)\n",
    "    \n",
    "    for neighbor in graph.get_neighbors(start):\n",
    "        if neighbor not in visited:\n",
    "            dfs(graph, neighbor, visited)\n",
    "    \n",
    "    return visited"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Second Degree Connection Check Implementation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "def is_second_degree_connection(graph: Graph, user1: str, user2: str) -> bool:\n",
    "    \"\"\"Check if user2 is a second-degree connection of user1\"\"\"\n",
    "    distances = bfs(graph, user1)\n",
    "    return distances.get(user2) == 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Example Usage and Testing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Testing second-degree connections:\n",
      "Is Mary a second-degree connection to John? True\n",
      "Alex's connections: ['john', 'greg', 'mary']\n",
      "\n",
      "Testing BFS distances from John:\n",
      "Distances from John to all nodes: {'john': 0, 'alex': 1, 'greg': 2, 'mary': 2}\n",
      "\n",
      "Testing DFS traversal from John:\n",
      "Nodes visited in DFS: {'john', 'alex', 'greg', 'mary'}\n"
     ]
    }
   ],
   "source": [
    "# Create social network graph from the chapter example\n",
    "social_graph = Graph(directed=False)\n",
    "\n",
    "# Add connections from the example\n",
    "social_graph.add_edge(\"john\", \"alex\")\n",
    "social_graph.add_edge(\"alex\", \"greg\")\n",
    "social_graph.add_edge(\"greg\", \"mary\")\n",
    "social_graph.add_edge(\"mary\", \"alex\")\n",
    "\n",
    "# Test cases\n",
    "print(\"Testing second-degree connections:\")\n",
    "print(f\"Is Mary a second-degree connection to John? {is_second_degree_connection(social_graph, 'john', 'mary')}\")\n",
    "print(f\"Alex's connections: {social_graph.get_neighbors('alex')}\")\n",
    "\n",
    "# Test BFS\n",
    "print(\"\\nTesting BFS distances from John:\")\n",
    "distances = bfs(social_graph, \"john\")\n",
    "print(f\"Distances from John to all nodes: {distances}\")\n",
    "\n",
    "# Test DFS\n",
    "print(\"\\nTesting DFS traversal from John:\")\n",
    "visited_nodes = dfs(social_graph, \"john\")\n",
    "print(f\"Nodes visited in DFS: {visited_nodes}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Visualize the social graph"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1000x800 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#visualize the social graph\n",
    "import networkx as nx\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "# Create NetworkX graph from our social graph\n",
    "G = nx.Graph()\n",
    "for v1 in social_graph.vertices:\n",
    "    for v2 in social_graph.get_neighbors(v1):\n",
    "        G.add_edge(v1, v2)\n",
    "\n",
    "# Set up the plot\n",
    "plt.figure(figsize=(10, 8))\n",
    "\n",
    "# Draw the graph\n",
    "pos = nx.spring_layout(G)\n",
    "nx.draw(G, pos, with_labels=True, node_color='lightblue', \n",
    "        node_size=1500, font_size=16, font_weight='bold')\n",
    "\n",
    "# Add edge labels\n",
    "edge_labels = {(u, v): '' for (u, v) in G.edges()}\n",
    "nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels)\n",
    "\n",
    "plt.title(\"Social Network Graph\", fontsize=16, pad=20)\n",
    "plt.axis('off')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
